package cc.wanforme.text2class.handler;


import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardOpenOption;
import java.util.List;

import cc.wanforme.text2class.entity.AnalysisConfig;
import cc.wanforme.text2class.entity.BeanField;

public abstract class BaseClassCeator {

    /** BeanDef 转变成 class
     * @param config 基本信息
     * @param list 必填 beanDef
     * */
    public abstract String dataToClass(AnalysisConfig config, List<BeanField> list);

    /** 保存文件 */
    public void saveFile(String content, File file) throws IOException {
        File parent = file.getParentFile();
        if (!parent.exists()) {
            parent.mkdirs();
        }

        Files.writeString(file.toPath(), content, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING,
                StandardOpenOption.WRITE);
    }

    /** 生成 class 文件，并保存到目录下
     * @param list 必填 beanDef
     * @param outLoc 保存父路径
     * */
    public void dataToClassAndSave(AnalysisConfig config, List<BeanField> list, String outLoc) throws IOException {
        String s = this.dataToClass(config, list);

        String packageName = config.getClassConfig().getPackageName();
        String filePath = config.getClassConfig().getName()+ ".java";
        if (packageName!=null) {
            filePath = packageName.replace(".", File.separator) + "/" + filePath;
        }

        this.saveFile(s, new File(outLoc, filePath));
    }

}
